
package team.common.util;

import java.text.ParseException;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 
* @Description: 对系统 timestamp 时间进行转换处理工具类
 */
public class DateFormatter {
	/**
	 * 获得系统当前时间
	 * @return	Date
	 */
	public static Date getSysTime(){
		Calendar sysTime = Calendar.getInstance();
		return sysTime.getTime();
	}
	/**
	 * 获得系统当前日期 精确到天
	 * @return
	 */
	public static Date getSysDay(){
		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.HOUR_OF_DAY,0);
		calendar.set(Calendar.MINUTE, 0);
		calendar.set(Calendar.SECOND, 0);
		calendar.set(Calendar.MILLISECOND,0);
		return calendar.getTime();
	}
	/**
	 * 获得系统当前日期之后天数日期 精确到天
	 * @return
	 */
	public static Date getSysAfterDay(int num){
		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.HOUR_OF_DAY,0);
		calendar.set(Calendar.MINUTE, 0);
		calendar.set(Calendar.SECOND, 0);
		calendar.set(Calendar.MILLISECOND,0);
		
		calendar.add(Calendar.DAY_OF_YEAR, num);
		return calendar.getTime();
	}
	
	/**
	 * 将 timestamp 转换成 String，精确到秒，格式：yyyy-mm-dd HH:mm:ss
	 * @return	String
	 */
	public static String formatSencond(Date dateParam){
		SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return fmt.format(dateParam);
	}
	
	public static Date formatSencond(String dateParam) throws ParseException{
		SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return fmt.parse(dateParam);
		
	}
	/**
	 * 将 timestamp 转换成 String，精确到分钟，格式：yyyy-mm-dd HH:mm
	 * @return	String
	 */
	public static String formatMinute(Date dateParam){
		SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm");
		return fmt.format(dateParam);
	}
	
	/**
	 * 将 timestamp 转换成 String，精确到小时，格式：yyyy-mm-dd HH
	 * @return	String
	 */
	public static String formatHour(Date dateParam){
		SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH");
		return fmt.format(dateParam);
	}
	
	/**
	 * 将 timestamp 转换成 String，精确到日，格式：yyyy-mm-dd
	 * @return	String
	 */
	public static String formatDay(Date dateParam){
		SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
		return fmt.format(dateParam);
	}
	
	/**
	 * 将 timestamp 转换成 String，精确到月，格式：yyyy-mm
	 * @return	String
	 */
	public static String formatMonth(Date dateParam){
		SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM");
		return fmt.format(dateParam);
	}

	/**
	 * 将 timestamp 转换成 String，精确到年，格式：yyyy
	 * @return	String
	 */
	public static String formatYear(Date dateParam){
		SimpleDateFormat fmt = new SimpleDateFormat("yyyy");
		return fmt.format(dateParam);
	}
	
	/**
	 * 将日期字符串转变为Date类型
	 * @param yearMonthDay
	 * @return
	 * @throws ParseException
	 */
	public static Date formatYearMonthDayToDateForyyyyMMdd(String yearMonthDay) throws ParseException{
		SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
		return fmt.parse(yearMonthDay);
	}
	
	/**
	 * 获得当前时间按规定月数前推后移
	 * @param num 前推或者后移的月数 
	 * @return
	 */
	public static String getDateByMonth(int num)
	{
		Calendar c = Calendar.getInstance();
		c.add(Calendar.MONTH, num);
		return formatDay(c.getTime()); 
	}
	
	/**
	 * 时间比较  参数1 和参数2相比较 格式不正确返回空
	 * @param date 
	 * @param comDate
	 * @return
	 */
	public static Integer compareDate(Date date,Date comDate)
	{
		try {
			Calendar c_1 = Calendar.getInstance();
			Calendar c_2 = Calendar.getInstance();
			
			c_1.setTime(date);
			c_2.setTime(comDate);
			
			return c_1.compareTo(c_2);
		} catch (Exception e) {
			return null;
		}
	}
	
	
}
	
